// 优先级事件阻止器 - 直接阻止所有文件事件，然后重新触发我们自己的事件
// 这个方案简单直接：先阻止所有事件，然后重新触发我们需要的文件事件

export const priorityEventBlockerScript = `
(function() {
  // 检查事件是否来自我们的应用
  function isFromOurApp(event) {
    const target = event.target;
    if (!target) return false;
    
    // 检查目标元素是否在我们的React应用根节点内
    const rootElement = document.getElementById('root');
    if (rootElement && rootElement.contains(target)) {
      console.log('⚡ 事件来自我们的应用，允许通过');
      return true;
    }
    
    // 检查目标元素是否包含我们的应用标识
    if (target.closest && target.closest('[data-app="react-chat"]')) {
      console.log('⚡ 事件来自我们的应用标识，允许通过');
      return true;
    }
    
    console.log('⚡ 事件不是来自我们的应用，目标:', target.tagName, target.className);
    return false;
  }
  
  // 智能阻止文件相关事件
  document.addEventListener('drop', function(event) {    
    // 先阻止所有事件传播（原始用户事件）
    event.stopImmediatePropagation();
    event.preventDefault();
    
      // 如果是我们的应用，发送自定义事件
      if (document._isOurApp) {
        const files = event.dataTransfer && event.dataTransfer.files ? Array.from(event.dataTransfer.files) : [];
        const customEvent = new CustomEvent('rc-file-drop', { 
          detail: { files, dataTransfer: event.dataTransfer },
          bubbles: true,
          cancelable: true
        });
        document.dispatchEvent(customEvent);
        console.log('⚡ 触发自定义事件rc-file-drop');
        return;
      }
    
    return false;
  }, true);
  
  document.addEventListener('change', function(event) {
    if (event.target && event.target.type === 'file') { 
      // 先阻止所有事件传播（原始用户事件）
      event.stopImmediatePropagation();
      event.preventDefault();

      
      // 如果是我们的应用，发送自定义事件
      if (document._isOurApp) {
        const files = Array.from(event.target.files || []);
        const customEvent = new CustomEvent('rc-file-change', { 
          detail: { files, target: event.target },
          bubbles: true,
          cancelable: true
        });
        document.dispatchEvent(customEvent);
        console.log('⚡ 触发自定义事件rc-file-change');
      }
      
      return false;
    }
  }, true);
  
  document.addEventListener('paste', function(event) {
    if (event.clipboardData && event.clipboardData.files.length > 0) {    
      // 先阻止所有事件传播（原始用户事件）
      event.stopImmediatePropagation();
      event.preventDefault();
      
      // 如果是我们的应用，发送自定义事件
      if (document._isOurApp) {
        const files = Array.from(event.clipboardData && event.clipboardData.files || []);
        const customEvent = new CustomEvent('rc-file-paste', { 
          detail: { files, clipboardData: event.clipboardData },
          bubbles: true,
          cancelable: true
        });
        document.dispatchEvent(customEvent);
        console.log('⚡ 触发自定义事件rc-file-paste');
        return;
      }
      
      return false;
    }
  }, true);
  
  document.addEventListener('dragover', function(event) {
    if (event.dataTransfer && event.dataTransfer.types.includes('Files')) {     
      // 先阻止所有事件传播（原始用户事件）
      event.stopImmediatePropagation();
      event.preventDefault();
      
      // 如果是我们的应用，发送自定义事件
      if (document._isOurApp) {
        const customEvent = new CustomEvent('rc-file-dragover', { 
          detail: { dataTransfer: event.dataTransfer },
          bubbles: true,
          cancelable: true
        });
        document.dispatchEvent(customEvent);
        console.log('⚡ 触发自定义事件rc-file-dragover');
        return;
      }
      
      return false;
    }
  }, true);
  
  document.addEventListener('dragenter', function(event) {
    if (event.dataTransfer && event.dataTransfer.types.includes('Files')) {      
      // 先阻止所有事件传播（原始用户事件）
      event.stopImmediatePropagation();
      event.preventDefault();
      
      // 如果是我们的应用，发送自定义事件
      if (document._isOurApp) {
        const customEvent = new CustomEvent('rc-file-dragenter', { 
          detail: { dataTransfer: event.dataTransfer },
          bubbles: true,
          cancelable: true
        });
        document.dispatchEvent(customEvent);
        console.log('⚡ 触发自定义事件rc-file-dragenter');
        return;
      }
      
      return false;
    }
  }, true);
})();
`;

/**
 * 注入优先级事件阻止器
 */
export function injectPriorityEventBlocker(): void {
  if (typeof document === 'undefined') return;
  
  document._isOurApp = true;
  
  // 创建script标签
  const script = document.createElement('script');
  script.textContent = priorityEventBlockerScript;
  script.setAttribute('data-priority-event-blocker', 'true');
  
  // 插入到head的最前面
  const head = document.head || document.getElementsByTagName('head')[0];
  if (head.firstChild) {
    head.insertBefore(script, head.firstChild);
  } else {
    head.appendChild(script);
  }
}

/**
 * 检查是否已经注入了优先级事件阻止器
 */
export function isPriorityEventBlockerInjected(): boolean {
  return document.querySelector('script[data-priority-event-blocker="true"]') !== null;
}
